// Vite配置文件
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';

// 环境变量处理
const env = process.env.NODE_ENV;

// 代理配置 - 开发环境
const getProxyConfig = () => {
  return {
    '/api': {
      target: env === 'development' ? 'http://127.0.0.1:3000' : '', // 使用本机地址
      changeOrigin: true,
      rewrite: (path) => path.replace(/^\/api/, '/api'),
      ws: true, // 支持WebSocket代理
      timeout: 60000,
      // 开发环境代理配置更灵活，允许其他电脑访问
      configure: (proxy, options) => {
        proxy.on('error', (err, req, res) => {
          console.log('代理错误:', err);
        });
        return proxy;
      }
    },
    // 添加文件上传路径的代理
    '/uploads': {
      target: env === 'development' ? 'http://127.0.0.1:3000' : '',
      changeOrigin: true,
      rewrite: (path) => path,
      timeout: 60000
    }
  };
};

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
      'vue': 'vue/dist/vue.esm-bundler.js'
    }
  },
  server: {
    port: 8080,
    host: true, // 确保可以通过IP地址访问
    open: false, // 不自动打开浏览器
    cors: true, // 允许跨域
    hmr: {
      overlay: false, // 关闭热更新错误遮罩层
      clientPort: 8080, // 确保WebSocket连接正确
      protocol: 'ws',
      // 增强HMR配置，确保在不同网络环境下都能正常工作
      host: '127.0.0.1', // 使用本机地址
      port: 8080 // 明确指定WebSocket端口
    },
    // 增加服务器超时和响应头
    timeout: 120000,
    headers: {
      'Cache-Control': 'no-store',
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
      'Access-Control-Allow-Headers': 'Origin, Content-Type, Authorization'
    },
    proxy: getProxyConfig()
  },
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    minify: 'terser',
    sourcemap: false,
    chunkSizeWarningLimit: 1000,
    // 优化生产构建配置，确保在其他环境中能正常运行
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['vue', 'layui'],
          axios: ['axios']
        },
        // 确保构建产物可以在不同路径下访问
        assetFileNames: 'assets/[name]-[hash].[ext]',
        chunkFileNames: 'assets/[name]-[hash].js',
        entryFileNames: 'assets/[name]-[hash].js'
      }
    }
  },
  // 优化开发环境性能
  optimizeDeps: {
    include: ['vue'],
    force: true // 强制依赖预构建
  },
  // 减少不必要的控制台输出
  logLevel: 'info',
  // 禁用某些可能影响编辑器预览的功能
  appType: 'spa',
  // 确保正确的模块解析
  ssr: {
    noExternal: ['vue', 'layui']
  }
});